Given the importance of data commonly stored on computers, several strategies have been developed to provide redundancy and prevent data loss in the case of a disk failure. Merely by way of example, many computers feature a redundant array of inexpensive disks (“RAID”) in order to provide mirroring capabilities, as well as, in some cases, enhance drive performance. A mirrored file generally is replicated on at least two different disks. When one of those disks fails, the mirrored file can be repaired in one of two ways: either the system triggers a repair by re-creating the lost data blocks from their redundant copies on the remaining disks in the system, or the system waits for an administrator to repair the failing disk, for example, by reconnecting a cable to the disk, etc.) and re-synchronizing stale blocks (i.e., blocks updated while the disk was not available) on the previously failed disk.
Each of these two common methods provides relative benefits and drawbacks. The first method surge to restore data redundancy immediately, but it is computationally expensive, because the entire content of the failed disk must be re-created. Consequently, data blocks remain unprotected for a relatively long period of time. On the other hand, the second method is faster, because only stale blocks must be copied, but leaves data blocks unprotected (i.e., not mirrored) while waiting for repair of the transient failure. Moreover, if a failure is not a transient failure (i.e., the disk must be replaced), the first repair method must be performed in any event, and performing the second method in the first instance merely prolongs the delay.